using Godot;
using System;
using System.Collections.Generic;
using 游戏设定.基类;
using 游戏设定.索引;

public partial class 舞台场景 : Control
{
    [Export] private 背包场景 背包场景实例;
    [Export] private Button 按钮;
    [Export] private PackedScene 组件道具场景;
    [Export] private PackedScene 组件弹窗;
    [Export] private PackedScene 弹窗场景;

    public override void _EnterTree()
    {
        游戏管理.置组件实例("舞台场景", this);
    }

    public override void _Ready()
    {
        按钮.Pressed += 按钮被点击;
    }

    public void 置道具弹窗(C道具模型 道具, Vector2 位置)
    {
        组件弹窗 弹窗介绍实例 = 组件弹窗.Instantiate<组件弹窗>();
        弹窗介绍实例.置数据(道具);

        PopupPanel 弹窗场景实例 = 弹窗场景.Instantiate<PopupPanel>();
        弹窗场景实例.AddChild(弹窗介绍实例);

        弹窗场景实例.Position = new Vector2I((int)位置.X, (int)位置.Y);
        弹窗场景实例.Visible = true;

        AddChild(弹窗场景实例);
    }

    private void 按钮被点击()
    {
        // 模拟一个战斗胜利后的掉落数组
        List<E装备索引> 掉落列表 = [E装备索引.武器, E装备索引.盔甲];

        // 循环战斗胜利掉落的道具列表
        foreach (var 索引 in 掉落列表)
        {
            var 道具 = 装备模型.取模型(索引);
            道具.名称 += +new Random().Next(1, 101);

            bool 是否添加 = true;

            for (int i = 0; i < 游戏存档.背包.Count; i++)
            {
                var 背包道具 = 游戏存档.背包[i];
                if (道具.索引 == 背包道具.索引)
                {
                    if (背包道具.可叠加 && 背包道具.数量 + 1 <= 背包道具.叠加上限)
                    {
                        背包道具.数量 += 1;
                        背包场景实例.置数量(背包道具.唯一码, 背包道具.数量);
                        是否添加 = false;
                        break;
                    }
                }
            }

            if (是否添加)
            {
                游戏存档.背包.Add(道具);
                背包场景实例.置道具(道具);
            }
        }
    }
}
